Skip to content

The bundled extension is ship, and it lives under druks.contrib#89

Merged
czpython merged 3 commits into
mainfrom
ship-rename
Jul 26, 2026
Merged

The bundled extension is ship, and it lives under druks.contrib#89
czpython merged 3 commits into
mainfrom
ship-rename

Conversation

@czpython

Copy link
Copy Markdown
Owner

build was the platform's only package that was really an app: druks/build sat beside druks/durable and druks/events as if it were platform. It moves to druks/contrib/ship, so the import path says which layer a module belongs to, and the extension takes the name the product uses.

  • druks.builddruks.contrib.ship; extension class BuildShip, name = "ship"; entry point ship = "druks.contrib.ship.extension:Ship".
  • The BuildWorkflow class becomes Build — inside the app it is still a build — so its durable kind is ship.build and the profiler's is ship.profile. BuildWorkspace, BuildJournal, BuildPromptContext hang off that workflow and keep their names.
  • Prompts move to templates/prompts/ship/, with build_workflow/ flattened to build/; names are ship/build/*.md, so a repo override lives at .druks/ship/prompts/build/*.md.
  • Frontend routes and API namespace move from /build to /ship.
  • The loader-purity test now guards the whole druks.contrib namespace instead of one extension.
  • One revision rewrites what is already in Postgres: settings_overrides.key extension:build:extension:ship:, and durable_runs.kind build.%ship.%.

Verified: ruff check, ruff format --check, pyright (135 errors, unchanged from main), pytest --collect-only (959 collected), frontend vitest (51 passed).

czpython added 2 commits July 26, 2026 16:45
build was the platform's only package that was really an app: druks/build sat beside druks/durable and druks/events as if it were platform. It moves to druks/contrib/ship, so the import path says which layer a module belongs to, and the extension takes the name the product uses.

The Build workflow keeps its name inside the app — it is still a build — but its durable kind is now ship.build, and one revision rewrites the kinds and settings keys already in Postgres.
The prompts sat in a platform-level backend/templates/prompts/ that only ship used, kept in the wheel by a force-include. They move to druks/contrib/ship/templates/, the root every extension gets: the resolver walks each installed extension's package for one and mounts it under the extension's name, so ship/build/implement.md is build/implement.md inside ship's own tree. Names and the .druks/ship/prompts/ override path are unchanged, and an extension shipped on its own now carries its templates with it.

That emptied backend/templates/, so the directory, the force-include, and the loader entry pointing at it go with it.
Both arrived after this branch forked: the transcript tests hit /api/build, and the scaffolding test proves a name collision against an installed extension — which build no longer is.
@czpython
czpython merged commit d9c0a9d into main Jul 26, 2026
2 checks passed
@czpython
czpython deleted the ship-rename branch July 26, 2026 09:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant